package com.yujiahao.bigdata.rdd.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  TODO SortByKey
    1、SoryByKey算子存在shuffle操作，有改变分区的能力
    2、SoreByKey算子是将key进行排序的
    3、参数说明：rdd.sortByKey(升序还是降序（true/false）,可以修改分区)
 */

object Spark_RDD_Pper_Transform_SortByKey {
  def main(args: Array[String]): Unit = {


    //TODO 1、获得连接
    val conf: SparkConf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc: SparkContext = new SparkContext(conf)

    //TODO 3、业务逻辑--将KV键值对按照Key值进行排序，也可以修改分区
    val rdd = sc.makeRDD(List(("a", 1), "a" -> 2, ("b" -> 3), "b" -> 4, ("b", 5), "a" -> 6), 2)
    //测试初始设置的分区
    rdd.saveAsTextFile("output")
    //这里将数据按照key值进行降序，并修改分区数
    val value: RDD[(String, Int)] = rdd.sortByKey(false, 2)
    //测试排序后的分区数
    value.saveAsTextFile("output1")

    value.collect().foreach(println)

    //TODO 2、关闭连接
    sc.stop()
  }
}